package com.qiyeweixin.Page;

import io.appium.java_client.*;
import io.appium.java_client.touch.WaitOptions;
import io.appium.java_client.touch.offset.PointOption;
import org.openqa.selenium.By;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.WebElement;

import java.time.Duration;
import java.util.List;
import java.util.logging.Logger;

/**
 * 定义基类
 */
public class BasePage {

    //定义成员变量
    public AndroidDriver driver;
    static Duration duration= Duration.ofSeconds(1);
    static Logger logger = Logger.getLogger("TestInfo");


    /**
     * 定义无参构造
     */
    public BasePage() {
    }


    /**
     * 定义全参构造
     * @param driver driver对象
     */
    public BasePage(AndroidDriver driver) {
        this.driver = driver;
    }

    /**
     * 查找元素
     * @param element 定位元素
     * @return 返回元素
     */
    public WebElement find(String[] element){
        logger.info("查找元素--"+element[1]);
        return driver.findElement(By.xpath(element[0]));
    }

    /**
     * 查找元素数组
     * @param element 定位元素
     * @return 返回元素数组
     */
    public List<WebElement> finds(String[] element){
        logger.info("查找元素--"+element[1]);
        return driver.findElements(By.xpath(element[0]));
    }

    /**
     * 点击元素
     * @param element 定位元素
     * @return 返回page本身
     */
    public BasePage click(String[] element){
        logger.info("点击元素--"+element[1]);
        find(element).click();
        return this;
    }

    /**
     * 按下标点击元素
     * @param element 定位元素
     * @param num 第几个
     * @return 返回page本身
     */
    public BasePage clicks(String[] element, Integer num){
        logger.info("点击控件--"+element[1]);
        finds(element).get(num).click();
        return this;
    }

    /**
     * 输入框输入文字
     * @param element 定位元素
     * @param contact 待输入的文字
     * @return 返回page本身
     */
    public BasePage sendKeys(String[] element, String contact){
        logger.info("往控件-"+element[1]+"输入--"+contact);
        find(element).sendKeys(contact);
        return this;
    }

    /**
     * 往上滑动屏幕查找元素
     * @param element 定位元素
     * @return 返回page本身
     */
    public BasePage swipeToUp(String[] element) {
        //  获取设备宽高
        //  int width = driver.manage().window().getSize().width;
        //  int height = driver.manage().window().getSize().height;
        //  循环滑动查找，如果找到这个元素就停止查找
        for (int i = 0; i < 5; i++) {
            if(finds(element).size() !=0){
                break;
            }else {
                TouchAction action1=new TouchAction(driver)
                        .press(PointOption.point(500, 1400))
                        .waitAction(WaitOptions.waitOptions(duration))
                        .moveTo(PointOption.point(500, 500)).release();
                action1.perform();
            }
        }
        return this;
    }

}
